package com.cy.dda.service.wechat;

import java.util.Map;

import com.cy.dda.model.Result;
import com.cy.dda.model.domain.user.UserWechat;
import com.cy.dda.model.dto.wechat.WechatMessageTemplateDTO;
import com.cy.dda.model.enums.wechat.WechatSopce;

/**
 * 微信接口服务 WechatService
 *
 * @author: tanyilin
 * @create: 2018年11月20日 下午5:35:32
 */
public interface WechatService {

	/**
     * 获取微信基础access_token
     *
     * @return
     */
    String getAccessToken();

    /**
     * 获取微信分享Ticket
     *
     * @param token
     * @return
     */
    String getTicket(String token);

    /**
     * 获取微信分享签名
     *
     * @param token
     * @param ticket
     * @param url
     * @return
     */
    Map<String, String> getShareSignature(String token, String ticket, String url);
    
    /**
     * 发送微信模板信息
     * 
     * @param wechatMessageTemplateDTO
     * @return
     */
    Result sendTemplateMessage(WechatMessageTemplateDTO wechatMessageTemplateDTO);
    
    /**
     * 获取用户授权路径url
     * 
     * @param userId
     * @param wechatSopce
     * @return
     */
    String getAuthorizeUrl(Long userId, WechatSopce wechatSopce);
    
    /**
     * 根据授权回调的code获取用户的access_token，同时也会返回openid
     * 
     * @param code
     * @return
     */
    Map<String, Object> getUserAccessToken(String code);
    
    /**
     * 根据用户的access_token、openId获取用户信息
     * 
     * @param accessToken
     * @param openId
     * @return
     */
    Map<String, Object> getUserInfo(String accessToken, String openId);
    
    /**
     * 用户授权回调方法
     * 
     * @param code
     * @param state
     * @return
     */
    UserWechat bindCallback(String code, String state);
    
    /**
     * 绑定用户-微信关联关系UserWechat
     * 
     * @param userWechat
     */
    void bindUserWechat(UserWechat userWechat);
    
}
